package com.joy.web.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.joy.common.model.vo.UserInfoVO;
import com.joy.web.admin.entity.User;
import com.joy.web.base.service.IBaseService;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author yjzhao
 * @since 2019-09-09
 */
public interface IUserService extends IBaseService<User> {

    /**
     * @Description  获取用户列表
     * @param userInfoVO 请求参数
     * @return
     * @Author yjzhao
     * @Date 2019/9/11 10:50
     **/
    IPage<UserInfoVO> getUserInfoList(UserInfoVO userInfoVO, Page<UserInfoVO> page) throws Exception;

    /**
     * @Description 根据 userId 获取用户信息
     * @param userId
     * @return
     * @Author yjzhao
     * @Date 2019/9/12 11:02
     **/
    UserInfoVO findUserInfoByUserId(String userId) throws Exception;

    /**
     * @Description 更新用户详情及权限
     * @param userInfoVO
     * @return
     * @Author yjzhao
     * @Date 2019/9/12 16:51
     **/
    boolean updateUserBaseInfoAndRoles(UserInfoVO userInfoVO) throws Exception;

    /**
     * @Description 根据 userNm 获取用户信息
     * @param userNm
     * @return
     * @Author yjzhao
     * @Date 2019/9/12 11:02
     **/
    UserInfoVO findUserInfoByUserNm(String userNm) throws Exception;

    /**
     * @Description 清空用户权限缓存
     * @param
     * @return
     * @Author yjzhao
     * @Date 2019/9/19 16:34
     **/
    void removeUserAuthorization() throws Exception;

    /**
     * @Description 密码重置
     * @param userId
     * @return
     * @Author yjzhao
     * @Date 2019/9/25 9:16
     **/
    boolean resetPwd(String userId) throws Exception;

    /**
     * @Description 用户更改密码
     * @param userId 用户Id
     * @param newPwd 密码
     * @return
     * @Author yjzhao
     * @Date 2019/9/25 17:48
     **/
    boolean updatePwd(String userId, String newPwd);

    /**
     * @Description 获取用户VO信息
     * @param userInfoVO
     * @return
     * @Author yjzhao 
     * @Date 2019/9/25 18:02
     **/
    boolean updateUserBaseInfo(UserInfoVO userInfoVO);
}
